package com.zx.cloud.common;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Locale;
import java.util.Map;

import org.apache.commons.lang3.CharEncoding;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.zx.cloud.config.ConfigUtil;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

@Component
public class FreeMarkerFactory {

	@Autowired
	private ConfigUtil configUtil;
	
	/**
	 * 根据ftl模板文件,生成静态HTML文件
	 * 
	 * @param ftlDir
	 *            FTL模板文件路径,例如["c:/liang/template.ftl"]
	 * @param fileName
	 *            生成HMTL文件路径，例如["lianggzone.html"]
	 * @param data
	 *            Map数据
	 * @return
	 * @throws TemplateException 
	 */
	public boolean createHTML(String ftlDir, String ftlName,String fileName, Map<String, Object> data) throws IOException, TemplateException {
		// step1 获取freemarker的配置
		Configuration freemarkerCfg = new Configuration(Configuration.VERSION_2_3_23);
		// step2 设置freemarker模板所放置的位置(文件夹)
		freemarkerCfg.setDirectoryForTemplateLoading(new File(ftlDir));
		// step3 设置freemarker模板编码
		freemarkerCfg.setEncoding(Locale.getDefault(), CharEncoding.UTF_8);
		// step4 找到对应freemarker模板并实例化
		Template template = freemarkerCfg.getTemplate(ftlName, CharEncoding.UTF_8);
		// step5 初始化一个IO流
		Writer writer=null;
		try {
			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(configUtil.getUploadAbsoluteFilePath()+File.separator+fileName)), CharEncoding.UTF_8));
			writer.flush();
			// step6 模板渲染出所要的内容
			template.process(data, writer);
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}finally {
			if(writer!=null){
				writer.close();
			}
		}
		return true;
	}

	/**
	 * 根据ftl模板文件,生成静态HTML文件
	 * 
	 * @param ftlPath
	 *            FTL模板文件路径,例如["c:/liang/template.ftl"]
	 * @param fileName
	 *            生成HMTL文件名称，例如["lianggzone.html"]
	 * @param data
	 *            Map数据
	 * @param isCreate4NoExists
	 *            是否文件夹不存在的时候创建
	 * @return
	 */
	public boolean createHTML(String ftlPath, String fileName, Map<String, Object> data) throws IOException {
		String ftlDir = StringUtils.substringBeforeLast(ftlPath, File.separator); // 获取FTL文件目录
		String ftlName = StringUtils.substringAfterLast(ftlPath, File.separator); // 获取FTL文件名
		// step1 获取freemarker的配置
		Configuration freemarkerCfg = new Configuration(Configuration.VERSION_2_3_23);
		// step2 设置freemarker模板所放置的位置(文件夹)
		freemarkerCfg.setDirectoryForTemplateLoading(new File(ftlDir));
		// step3 设置freemarker模板编码
		freemarkerCfg.setEncoding(Locale.getDefault(), CharEncoding.UTF_8);
		// step4 找到对应freemarker模板并实例化
		Template template = freemarkerCfg.getTemplate(ftlName, CharEncoding.UTF_8);
		// step5 初始化一个IO流
		Writer writer=null;
		try {
			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(configUtil.getUploadAbsoluteFilePath()+File.separator+fileName)), CharEncoding.UTF_8));
			writer.flush();
			// step6 模板渲染出所要的内容
			template.process(data, writer);
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}finally {
			if(writer!=null){
				writer.close();
			}
		}
		return true;
	}
	
	
}